NexusPi Git Node
lib/microReticulum/src/Cryptography/Ed25519.h 20ec0b4ee3f3e7a8b3c8d00dcdcd5afdcf2bc840 (20ec0b4e) Text, 2.31 KB
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72include T8b949e"Bytes.h"
Tff7b72#Tff7b72include T8b949e<Ed25519.h>
Tff7b72#Tff7b72include T8b949e<memory>
T8b949e/*
Note that the library currently in use for Ed25519 does not support generating keys from a seed.
*/
Te6edf3namespace Te6edf3RNS Tb4b4b4{ Te6edf3namespace Te6edf3Cryptography Tb4b4b4{
Te6edf3class Te6edf3Ed25519PublicKey Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3using Te6edf3Ptr Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3Ed25519PublicKeyTff7b72>Tb4b4b4;
Te6edf3publicTff7b72:
Te6edf3Ed25519PublicKeyTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3publicKeyTb4b4b4) Tb4b4b4{
Te6edf3_publicKey Tff7b72= Te6edf3publicKeyTb4b4b4;
Tb4b4b4}
Tff7b72~Te6edf3Ed25519PublicKeyTb4b4b4(Tb4b4b4) Tb4b4b4{Tb4b4b4}
Te6edf3publicTff7b72:
T8b949e// creates a new instance with specified seed
Tff7b72static Tff7b72inline Te6edf3Ptr Te6edf3from_public_bytesTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3publicKeyTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3PtrTb4b4b4(Te6edf3new Te6edf3Ed25519PublicKeyTb4b4b4(Te6edf3publicKeyTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Te6edf3public_bytesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3_publicKeyTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3verifyTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3signatureTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3messageTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3Ed25519Tff7b72:Tff7b72:Te6edf3verifyTb4b4b4(Te6edf3signatureTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3_publicKeyTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3privateTff7b72:
Te6edf3Bytes Te6edf3_publicKeyTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3class Te6edf3Ed25519PrivateKey Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3using Te6edf3Ptr Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3Ed25519PrivateKeyTff7b72>Tb4b4b4;
Te6edf3publicTff7b72:
Te6edf3Ed25519PrivateKeyTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3privateKeyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3privateKeyTb4b4b4) Tb4b4b4{
T8b949e// use specified private key
Te6edf3_privateKey Tff7b72= Te6edf3privateKeyTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e// create random private key
Te6edf3Ed25519Tff7b72:Tff7b72:Te6edf3generatePrivateKeyTb4b4b4(Te6edf3_privateKeyTb4b4b4.Te6edf3writableTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// derive public key from private key
Te6edf3Ed25519Tff7b72:Tff7b72:Te6edf3derivePublicKeyTb4b4b4(Te6edf3_publicKeyTb4b4b4.Te6edf3writableTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3_privateKeyTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72~Te6edf3Ed25519PrivateKeyTb4b4b4(Tb4b4b4) Tb4b4b4{Tb4b4b4}
Te6edf3publicTff7b72:
T8b949e// creates a new instance with a random seed
Tff7b72static Tff7b72inline Te6edf3Ptr Te6edf3generateTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// CBA TODO determine why below is confused with (implicit) copy constructor
T8b949e//return Ptr(new Ed25519PrivateKey({Bytes::NONE}));
Tff7b72return Te6edf3PtrTb4b4b4(Te6edf3new Te6edf3Ed25519PrivateKeyTb4b4b4(Te6edf3BytesTff7b72:Tff7b72:Te6edf3NONETb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// creates a new instance with specified seed
Tff7b72static Tff7b72inline Te6edf3Ptr Te6edf3from_private_bytesTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3privateKeyTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3PtrTb4b4b4(Te6edf3new Te6edf3Ed25519PrivateKeyTb4b4b4(Te6edf3privateKeyTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Te6edf3private_bytesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3_privateKeyTb4b4b4;
Tb4b4b4}
T8b949e// creates a new instance of public key for this private key
Tff7b72inline Te6edf3Ed25519PublicKeyTff7b72:Tff7b72:Te6edf3Ptr Te6edf3public_keyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3Ed25519PublicKeyTff7b72:Tff7b72:Te6edf3from_public_bytesTb4b4b4(Te6edf3_publicKeyTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3Bytes Te6edf3signTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3messageTb4b4b4) Tb4b4b4{
Te6edf3Bytes Te6edf3signatureTb4b4b4;
Te6edf3Ed25519Tff7b72:Tff7b72:Te6edf3signTb4b4b4(Te6edf3signatureTb4b4b4.Te6edf3writableTb4b4b4(T79c0ff64Tb4b4b4)Tb4b4b4, Te6edf3_privateKeyTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3_publicKeyTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3signatureTb4b4b4;
Tb4b4b4}
Te6edf3privateTff7b72:
Te6edf3Bytes Te6edf3_privateKeyTb4b4b4;
Te6edf3Bytes Te6edf3_publicKeyTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tb4b4b4}
Served by rngit 1.4.2 - Generated in 0.02s